
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.text.Text;

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
/**
 *
 * @author enrico
 */
public class ModificaLibroView extends GridPane {
  
  private TextField titoloField = new TextField();
  private TextField sottotitoloField = new TextField();
  private TextField autoreField = new TextField();
  private TextField editoreField = new TextField();
  private TextField annoField = new TextField();
  private TextField scField = new TextField();
  private TextField prscField = new TextField();
  private TextField prField = new TextField();
  private TextField undField = new TextField();
  private TextField quantitaField = new TextField();
  private int sezioneNumero=0, id;
  private RadioButton sez1 = new RadioButton("I "), sez2 = new RadioButton("II "), sez3 = new RadioButton("III "), sez4 = new RadioButton("IV "),
          sez5 = new RadioButton("DERIN/GODEAS "), sez6 = new RadioButton("ANVGD "), sez7 = new RadioButton("VII "), sez8 = new RadioButton("VIII");
  private ToggleGroup group = new ToggleGroup();
  private Boolean modificheNonSalvate = false;
  private Button modificaButton;
  private Button removeLibro;
  private ModificaLibroController controller;
  private boolean emptyAutore=true,emptyTitolo=true,emptyQuantita=true;
  private Button prestaButton = new Button("Presta");
  private ListView<String> listaPrestiti = new ListView<String>();
  private LibroModel libroSelezionato;
  
  public ModificaLibroView(final ModificaLibroController controller) {
    this.controller = controller;
    this.setHgap(8);
    this.setVgap(4);
    
    Text titolo = new Text("Titolo");
    Text sottoTitolo = new Text("Sottotitolo");
    Text autore = new Text("Autore");
    Text editore = new Text("Editore");
    Text anno = new Text("Anno");
    Text sezione = new Text("Sezione");
    Text sc = new Text("SC");
    Text prsc = new Text("PRSC");
    Text pr = new Text("PR");
    Text und = new Text("Und");
    Text quantita = new Text("Quantità");
    
    modificaButton = new Button("Modifica", new ImageView(new Image(getClass().getResourceAsStream("Stili/edit.png"))));
    modificaButton.setId("record-sales");
    modificaButton.setDisable(true);
    modificaButton.setOnAction(new EventHandler<ActionEvent>() {
      
      @Override
      public void handle(ActionEvent arg0) {
        salvaModifiche();
      }
    });
    
    removeLibro = new Button("Elimina libro dalla biblioteca");//, new ImageView(new Image(getClass().getResourceAsStream("Stili/delete.png"))));
    removeLibro.setId("round-red");
    removeLibro.setDisable(true);
    removeLibro.setOnAction(new EventHandler<ActionEvent>() {

      @Override
      public void handle(ActionEvent arg0) {
        controller.removeLibro(sezioneNumero, id);
      }
    });
    
    scField.setPrefWidth(50);
    prscField.setPrefWidth(50);
    prField.setPrefWidth(50);
    undField.setPrefWidth(50);
    titoloField.setPrefWidth(250);
    quantitaField.setPrefWidth(50);
    
    setModificaListener(sez1);
    setModificaListener(sez2);
    setModificaListener(sez3);
    setModificaListener(sez4);
    setModificaListener(sez5);
    setModificaListener(sez6);
    setModificaListener(sez7);
    setModificaListener(sez8);
    
    setModificaListener(titoloField);
    setModificaListener(autoreField);
    setModificaListener(sottotitoloField);
    setModificaListener(annoField);
    setModificaListener(editoreField);
    setModificaListener(scField);
    setModificaListener(prscField);
    setModificaListener(prField);
    setModificaListener(undField);
    setModificaListener(quantitaField);
    
    HBox hb = new HBox();
    hb.getChildren().addAll(sez1, sez2, sez3, sez4, sez5, sez6, sez7, sez8);
    sez1.setToggleGroup(group);
    sez2.setToggleGroup(group);
    sez3.setToggleGroup(group);
    sez4.setToggleGroup(group);
    
    this.add(sezione, 0, 0);
    this.add(titolo, 0, 1);
    this.add(sottoTitolo, 0, 2);
    this.add(autore, 0, 3);
    this.add(editore, 0, 4);
    this.add(anno, 0, 5);
    this.add(sc, 2, 0);
    this.add(prsc, 2, 1);
    this.add(pr, 2, 2);
    this.add(und, 2, 3);
    this.add(quantita, 2, 4);
    this.add(modificaButton, 2, 5, 2, 2);
    this.add(removeLibro, 5, 0);
    this.add(prestaButton, 4, 0);
    prestaButton.setDisable(true);
    prestaButton.setOnAction(new EventHandler<ActionEvent>() {

      @Override
      public void handle(ActionEvent arg0) {
        // prestiamo
        int sez = 0;
        if (sez1.isSelected()) sez = 1;
        if (sez2.isSelected()) sez = 2;
        if (sez3.isSelected()) sez = 3;
        if (sez4.isSelected()) sez = 4;
        if (sez5.isSelected()) sez = 5;
        if (sez6.isSelected()) sez = 6;
        if (sez7.isSelected()) sez = 7;
        if (sez8.isSelected()) sez = 8;        
        
        controller.prestaLibro(id,sez);
        prestaButton.setDisable(true);
        removeLibro.setDisable(true);
      }
    });
    this.add(listaPrestiti,4,1,2,6);
    listaPrestiti.setPrefHeight(150);
    this.add(hb, 1, 0);
    this.add(titoloField, 1, 1);
    this.add(sottotitoloField, 1, 2);
    this.add(autoreField, 1, 3);
    this.add(editoreField, 1, 4);
    this.add(annoField, 1, 5);
    this.add(scField, 3, 0);
    this.add(prscField, 3, 1);
    this.add(prField, 3, 2);
    this.add(undField, 3, 3);
    this.add(quantitaField, 3, 4);
    
    autoreField.setOnKeyReleased(new EventHandler<KeyEvent>() {

      @Override
      public void handle(KeyEvent arg0) {
        if(autoreField.getText().trim().isEmpty()) emptyAutore=true;
        else emptyAutore=false;
        
        checkPulsante();
      }
    });
    titoloField.setOnKeyReleased(new EventHandler<KeyEvent>() {

      @Override
      public void handle(KeyEvent arg0) {
        if(titoloField.getText().trim().isEmpty()) emptyTitolo=true;
        else emptyTitolo=false;
        
        checkPulsante();
      }
    });
    
    quantitaField.setOnKeyReleased(new EventHandler<KeyEvent>() {

      @Override
      public void handle(KeyEvent arg0) {
        
        
        try {
          int q = Integer.valueOf(quantitaField.getText());
          emptyQuantita=false;
          if (q<1) emptyQuantita=true;
        } catch(NumberFormatException nfe) {
          emptyQuantita=true;
        }
        
        if(quantitaField.getText().trim().isEmpty()) emptyTitolo=true;
        else emptyTitolo=false;
        checkPulsante();
      }
    });
  }
  
  public void setLibroData(String sezione, String titolo, String sottotitolo, String autore, String editore, String anno, String sc, String prsc, String pr, String und, String quantita, String ID, boolean prestato, boolean rimuovibile) {
    // seleziono la sezione giusta

    this.sezioneNumero = Integer.valueOf(sezione);
    this.id = Integer.valueOf(ID);
    int sezioneInt = Integer.valueOf(sezione);
    
    sez1.setSelected(false);
    sez2.setSelected(false);
    sez3.setSelected(false);
    sez4.setSelected(false);
    sez5.setSelected(false);
    sez6.setSelected(false);
    sez7.setSelected(false);
    sez8.setSelected(false);
    
    switch (sezioneInt) {
      case 1:
        sez1.setSelected(true);
        break;
      case 2:
        sez2.setSelected(true);
        break;
      case 3:
        sez3.setSelected(true);
        break;
      case 4:
        sez4.setSelected(true);
        break;
      case 5:
        sez5.setSelected(true);
        break;
      case 6:
        sez6.setSelected(true);
        break;
      case 7:
        sez7.setSelected(true);
        break;
      case 8:
        sez8.setSelected(true);
        break;
    }
    
    emptyAutore=false;
    emptyTitolo=false;
    emptyQuantita=false;
    titoloField.setText(titolo);
    sottotitoloField.setText(sottotitolo);
    autoreField.setText(autore);
    editoreField.setText(editore);
    annoField.setText(anno);
    scField.setText(sc);
    prscField.setText(prsc);
    undField.setText(und);
    prField.setText(pr);
    quantitaField.setText(quantita);
    removeLibro.setDisable(false);

    if (prestato) {
      prestaButton.setDisable(true);
      removeLibro.setDisable(true);
    }
    else {
      prestaButton.setDisable(false);
      if (rimuovibile) removeLibro.setDisable(false);
      else removeLibro.setDisable(true);
    }
  }
  
  public boolean getModificheNonSalvate() {
    return modificheNonSalvate;
  }
  
  public void setModificheNonSalvate(boolean v) {
    modificheNonSalvate = v;
    // tolgo gli stili
    titoloField.setStyle("-fx-border-width: 0;");
    //sezioneField.setStyle("-fx-border-width: 0;");
    sottotitoloField.setStyle("-fx-border-width: 0;");
    autoreField.setStyle("-fx-border-width: 0;");
    editoreField.setStyle("-fx-border-width: 0;");
    annoField.setStyle("-fx-border-width: 0;");
    scField.setStyle("-fx-border-width: 0;");
    prscField.setStyle("-fx-border-width: 0;");
    undField.setStyle("-fx-border-width: 0;");
    prField.setStyle("-fx-border-width: 0;");
    quantitaField.setStyle("-fx-border-width: 0;");
    modificaButton.setDisable(true);
  }
  
  private void setModificaListener(final TextField tf) {
    tf.setOnKeyTyped(new EventHandler<KeyEvent>() {
      
      @Override
      public void handle(KeyEvent key) {
        tf.setStyle("-fx-border-width: 1; -fx-border-color: rgb(187,231,61);");
        modificheNonSalvate = true;
        modificaButton.setDisable(false);
        checkPulsante();
      }
    });
  }
  
  private void setModificaListener(RadioButton sez1) {
    sez1.setOnAction(new EventHandler<ActionEvent>() {
      
      @Override
      public void handle(ActionEvent key) {
        modificheNonSalvate = true;
        modificaButton.setDisable(false);
        checkPulsante();
      }
    });
  }

  void salvaModifiche() {
    int sezioneB;
    if (sez1.isSelected()) sezioneB = 1;
      else if (sez2.isSelected()) sezioneB = 2;
      else if (sez3.isSelected()) sezioneB = 3;
      else if (sez4.isSelected()) sezioneB = 4;
      else if (sez5.isSelected()) sezioneB = 5;
      else if (sez6.isSelected()) sezioneB = 6;
      else if (sez7.isSelected()) sezioneB = 7;
      else sezioneB = 8;
    controller.salvaModifiche(String.valueOf(id),titoloField.getText(),sottotitoloField.getText(), autoreField.getText(), editoreField.getText(), annoField.getText(), scField.getText(), prscField.getText(), prField.getText(),undField.getText(),quantitaField.getText(),String.valueOf(sezioneB),sezioneNumero);
  }
  
  private void checkPulsante() {
    if (emptyAutore==false && emptyTitolo==false && emptyQuantita==false) 
      modificaButton.setDisable(false);
    else
      modificaButton.setDisable(true);
  }
  
  public ListView getListaPrestiti() {
    return listaPrestiti;
  }
}
